/**
 * 应用程序根模块
 *
 * @file   app.module.ts
 * @author ahaotriple
 * @date   2024-03-05
 * @version 1.0.0
 * @license MIT
 *
 * @description
 * 这是应用程序的根模块，负责组织和配置整个应用程序。
 * 主要功能：
 * 1. 配置数据库连接
 * 2. 注册全局拦截器
 * 3. 导入和组织其他功能模块
 * 4. 配置全局提供者
 *
 * @example
 * // 在 main.ts 中使用
 * const app = await NestFactory.create(AppModule);
 * await app.listen(3000);
 */

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { AppGateway } from './gateways/app.gateway';
import { APP_INTERCEPTOR } from '@nestjs/core';
import { TransformInterceptor } from './common/interceptors/transform.interceptor';
import { RolesModule } from './modules/roles/roles.module';
import { databaseConfig } from './config/database.config';

/**
 * 应用程序根模块
 * 配置整个应用程序的依赖和模块
 *
 * @class AppModule
 * @module AppModule
 */
@Module({
  imports: [
    // 配置数据库连接
    TypeOrmModule.forRoot(databaseConfig),
    // 导入角色模块
    RolesModule,
  ],
  controllers: [AppController],
  providers: [
    AppService,
    AppGateway,
    // 注册全局响应转换拦截器
    {
      provide: APP_INTERCEPTOR,
      useClass: TransformInterceptor,
    },
  ],
})
export class AppModule {}
